/*
 * Copyright (c) 2009, 2012 IBM Corp.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Dave Locke - initial API and implementation and/or initial documentation
 */
package org.eclipse.paho.client.mqttv3.internal;

/**
 * Catalog of human readable error messages.
 */
public abstract class MessageCatalog {

    private static MessageCatalog INSTANCE = null;

    public static final String getMessage(int id) {
        try {
            if (INSTANCE == null) {
                if (ExceptionHelper.isClassAvailable("java.util.ResourceBundle")) {
                    try {
                        // Hide this class reference behind reflection so that the class does not need to
                        // be present when compiled on midp
                        INSTANCE = (MessageCatalog) Class.forName("org.eclipse.paho.client.mqttv3.internal.ResourceBundleCatalog").newInstance();
                    } catch (Exception e) {
                        return "";
                    }
                } else if (ExceptionHelper.isClassAvailable("org.eclipse.paho.client.mqttv3.internal.MIDPCatalog")) {
                    try {
                        INSTANCE = (MessageCatalog) Class.forName("org.eclipse.paho.client.mqttv3.internal.MIDPCatalog").newInstance();
                    } catch (Exception e) {
                        return "";
                    }
                }
            }
            return INSTANCE.getLocalizedMessage(id);
        } catch (Exception e) {
            return "";
        }
    }

    protected abstract String getLocalizedMessage(int id);
}
